package com.huike.web.controller.review;


import com.github.pagehelper.PageHelper;
import com.huike.common.core.controller.BaseController;
import com.huike.common.core.domain.AjaxResult;
import com.huike.common.core.page.TableDataInfo;
import com.huike.common.exception.CustomException;
import com.huike.review.pojo.Review;
import com.huike.review.service.ReviewService;
import com.huike.review.vo.MybatisReviewVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 该Controller主要是为了复习三层架构以及Mybatis使用的，该部分接口已经放开权限，可以直接访问
 * 同学们在此处编写接口通过浏览器访问看是否能完成最简单的增删改查
 */
@RestController
@RequestMapping("/review")
@Slf4j
public class MybatisReviewController extends BaseController {

    @Autowired
    private ReviewService reviewService;

    /**
     * 新增接口
     * 接口名：/review/saveData/吴思远/18/男
     * 请求方式：GET请求
     * 传入参数：接口路径上传值/review/saveData/{name}/{age}/{sex}
     * 返回值：
     * {
     * "msg": "成功插入:1条数据",
     * "code": 200
     * }
     *
     * @param name
     * @param age
     * @param sex
     * @return
     */
    @GetMapping("/saveData/{name}/{age}/{sex}")
    public AjaxResult saveData(@PathVariable String name, @PathVariable Integer age, @PathVariable String sex) {
        int result = reviewService.insertReview(name, age, sex);
        if (result == 0) {
            return AjaxResult.error();
        }
        return AjaxResult.success("成功插入:1条数据");
    }

    /**
     * 新增接口:
     * 接口名：/review/saveData
     * 请求方式：POST请求
     * 传入参数：{
     * "name":"吴思敏",
     * "age":18,
     * "sex":"女"
     * }
     * 返回值：
     * {
     * "msg": "成功插入:1条数据",
     * "code": 200
     * }
     *
     * @param mybatisReviewVO
     * @return
     */
    @PostMapping("/saveData")
    public AjaxResult saveData(@RequestBody MybatisReviewVO mybatisReviewVO) {
        //传入对象不为空
        if (ObjectUtils.isNotEmpty(mybatisReviewVO)) {
            //获取对象中的name,sex,age的值
            String name = mybatisReviewVO.getName();
            String sex = mybatisReviewVO.getSex();
            Integer age = mybatisReviewVO.getAge();
            //调用service层方法
            int result = reviewService.insertReview(name, age, sex);
            if (result == 0) {
                return AjaxResult.error();
            }
            return AjaxResult.success("成功插入:1条数据");
        } else {//传入对象为空的话 返回一个错误码
            return AjaxResult.error("传入对象不为空");
        }
    }

    /**
     * 修改接口：
     * 接口名：/review/update
     * 请求方式：POST请求
     * 传入参数：
     * {
     * "id":21,
     * "name":"吴思鹏",
     * "age":18,
     * "sex":"男"
     * }
     * 返回值：
     * {
     * "msg": "修改成功",
     * "code": 200
     * }
     *
     * @param mybatisReviewVO
     * @return
     */
    @PostMapping("/update")
    public AjaxResult updateRevies(@RequestBody MybatisReviewVO mybatisReviewVO) {
        //传入对象不为空
        if (ObjectUtils.isNotEmpty(mybatisReviewVO)) {
            //调用service的更新方法
            int result = reviewService.updateById(mybatisReviewVO);
            //判断结构
            if (result == 0) {
                return AjaxResult.error();
            }
            return AjaxResult.success("成功插入:1条数据");
        } else {//传入对象为空的话 返回一个错误码
            return AjaxResult.error("传入对象不为空");
        }
    }

    /**
     * 删除接口：
     * 接口名：/review/remove/17
     * 请求方式：DELETE请求
     * 传入参数：/review/remove/{id}
     * 返回值：
     * {
     * "msg": "成功删除:1条数据",
     * "code": 200
     * }
     *
     * @param id
     * @return
     */
    @DeleteMapping("/remove/{id}")
    public AjaxResult deleteById(@PathVariable Integer id) {
        int result = reviewService.deleteById(id);
        //判断结果
        if (result == 0) {
            return AjaxResult.error();
        }
        return AjaxResult.success("成功删除:1条数据");
    }

    /**
     * 单条件查询，根据id来查询数据：
     * 接口名：/review/getById?id=1
     * 请求方式：GET请求
     * 传入参数：id
     * 返回值：AjaxResult
     *
     * @param id
     * @return
     */
    @GetMapping("/getById")
    public AjaxResult getById(Integer id) {
        List<Review> list = reviewService.getById(id);
        log.info("list:{}", list);
        //判断获取的对象
        if (ObjectUtils.isNotEmpty(list)) {
            return AjaxResult.success("操作成功", list);
        }
        return AjaxResult.error("该id对应对象为空");
    }

    /**
     * 分页查询：
     * 接口名：/review/getDataByPage?pageNum=1&pageSize=10
     * 请求方式：GET请求
     * 传入参数：pageNum:当前页,pageSize:每页显示条数
     * 返回值：TableDataInfo
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/getDataByPage")
    public TableDataInfo getDataByPage(Integer pageNum, Integer pageSize) {
        TableDataInfo tableDataInfo = reviewService.getDataByPage(pageNum, pageSize);
        return tableDataInfo;
    }
}